// 管理员认证控制器
const { User } = require('../models');
const { verifyPassword, hashPassword } = require('../utils/tools');
const { generateToken } = require('../middlewares/auth');

// 显示登录页面
exports.showLogin = (req, res) => {
  res.render('auth/login', { title: '管理员登录' });
};

// 处理登录请求
exports.login = async (req, res) => {
  const { email, password, remember } = req.body;
  
  try {
    // 查找用户
    const user = await User.findOne({ where: { email } });
    
    // 验证用户和密码
    if (!user || !user.isAdmin || !(await verifyPassword(password, user.password))) {
      return res.render('auth/login', {
        title: '管理员登录',
        error: '邮箱或密码错误'
      });
    }
    
    // 生成token
    const token = generateToken(user.id);
    
    // 设置cookie
    res.cookie('auth_token', token, {
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      maxAge: remember ? 7 * 24 * 60 * 60 * 1000 : 24 * 60 * 60 * 1000 // 记住我则保存7天，否则1天
    });
    
    // 重定向到管理首页
    res.redirect('/admin/dashboard');
  } catch (error) {
    console.error('登录错误:', error);
    res.render('auth/login', {
      title: '管理员登录',
      error: '登录失败，请稍后重试'
    });
  }
};

// 处理注销请求
exports.logout = (req, res) => {
  res.clearCookie('auth_token');
  res.redirect('/admin/login');
};

// 初始化管理员账户（仅在开发时使用）
exports.initAdmin = async (req, res) => {
  try {
    // 检查是否已存在管理员
    const adminExists = await User.findOne({ where: { email: 'admin@example.com' } });
    
    if (adminExists) {
      return res.json({ message: '管理员账户已存在' });
    }
    
    // 创建管理员账户
    const admin = await User.create({
      username: '管理员',
      email: 'admin@example.com',
      password: await hashPassword('admin123'),
      isAdmin: true,
      isMember: true
    });
    
    res.json({ message: '管理员账户创建成功', admin });
  } catch (error) {
    console.error('创建管理员错误:', error);
    res.status(500).json({ message: '创建管理员失败' });
  }
};